#include <iostream>
#include <fstream>
#include "linearList.h"
using namespace std;

int main()
{
    // 线性表测试
    float f[5] = { -2.2, 1.2, 0.0, -0.0001, 0.0 };
    float val = 999;
    sequenceList s(7, 5, f);
    // 1.初始化
    s.print(); //5:-2.2, 1.2, 0, -0.0001, 0

    // 2.末尾添加
    s.addItem(-2.2);
    s.print(); //6:-2.2, 1.2, 0, -0.0001, 0, -2.2

    // 3. 开头插入
    s.insertItem(0, 1.0);
    s.print(); //7:1, -2.2, 1.2, 0, -0.0001, 0, -2.2

    // 4. 非法插入，已满
    cout << s.addItem(0.0) << endl; //0 (false，已满)

    // 5. 删除不存在的值
    cout << s.deleteItem(10) << endl; //-1 (找不到元素）

    // 6. 删除存在的值
    s.deleteItem(-2.2);
    s.print(); //6:1, 1.2, 0, -0.0001, 0, -2.2

    // 7. 非法按序号寻找
    cout << s.locate(7, val) << " ";
    cout << val << endl; // 0 999（val不更新）

    // 8. 按值寻找不存在的值
    cout << s.locate(8) << endl; // -1

    // 9. 反转
    s.reverse();
    s.print(); //6:-2.2, 0, -0.0001, 0, 1.2, 1

    // 链表测试
    linkList l(5, f);
    // 10. 初始化
    l.print(); //5:-2.2, 1.2, 0, -0.0001, 0

    // 11. 头插入
    l.headInsertItem(1.0); //6:1, -2.2, 1.2, 0, -0.0001, 0
    l.print();

    // 12. 尾插入
    l.tailInsertItem(0.0); //7:1, -2.2, 1.2, 0, -0.0001, 0, 0
    l.print();

    // 13. 中间插入
    l.insertItem(3, 6.6); //8:1, -2.2, 1.2, 6.6, 0, -0.0001, 0, 0
    l.print();

    // 14. 按值删除
    l.deleteItem(0.0); //7:1, -2.2, 1.2, 6.6, -0.0001, 0, 0
    l.print();

    // 15. 按序号寻找存在的元素，无论是序号还是下标，都是0
    cout << l.locate(6, val) << " ";
    cout << val << endl; // 1 0

    // 16. 按值查找不存在的元素
    cout << l.locate(0.0001) << endl; //-1（元素不存在）

    // 17. 反转
    l.reverse(); //7:0, 0, -0.0001, 6.6, 1.2, -2.2, 1
    l.print();

    // 18. 按值查找存在的元素
    cout << l.locate(1.0) << endl; // 6

    // 19. 升序排列
    l.ascendingOrder(); //7:-2.2, -0.0001, 0, 0, 1, 1.2, 6.6
    l.print();

    // merge测试
    float g[3] = { -10, 0.0001, 3.2 };
    linkList m(3, g);
    // 20. 归并降序排列
    merge(l, m);
    l.print(); //10:6.6, 3.2, 1.2, 1, 0.0001, 0, 0, -0.0001, -2.2, -10

    return 0;
}
